home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekikoh Dennoh Club 2
/
Gekikoh Dennoh Club Vol. 2 (Japan).7z
/
Gekikoh Dennoh Club Vol. 2 (Japan) (Track 01).bin
/
fsw
/
opth
/
opth40.lzh
/
OpTh.s
< prev
next >
Wrap
Text File
|
1997-08-24
|
7KB
|
332 lines
**********************************************************
** **
** Optical Through Tool for MercuryUnit ver0.40 **
** **
** Programed by ふなぽん **
** **
**********************************************************
.include doscall.mac
.include iocscall.mac
.include const.h
.cpu 68000
.text
.even
lea.l MYSP(pc),sp *スタックポイントを指定のアドレスへ
pea.l MAIN_MES(pc)
DOS _PRINT
addq.l #4,sp
**********************************************************
** Comand Line Option Check **
**********************************************************
moveq.l #0,d6 *何も実行して無い用フラグ
C_CHECK:
addq.l #1,a2
bsr SKIPSP *スペースをスキップ
tst.b (a2) *引数があるか?
beq STEREO_OPTICAL_OUT
cmpi.b #'-',(a2)
beq OP_CHECK
cmpi.b #'/',(a2)
beq OP_CHECK
bra HELP
OP_CHECK:
addq.l #1,a2 *"/"や"-"の分a2を進めておく
move.b (a2)+,d0 *一文字取り出す
bsr TOUPPER *大文字に変換しておく
cmpi.b #"C",d0
beq OPTICAL_CHECK
cmpi.b #"S",d0
beq OPTICAL_STOP
cmpi.b #"M",d0
beq STEREO_OPTICAL_OUT
cmpi.b #"R",d0
beq RIGHT_OPTICAL_OUT
cmpi.b #"L",d0
beq LEFT_OPTICAL_OUT
cmpi.b #"A",d0
beq ADPCM_THROUGH
tst.b (a2)
beq END_1
bra HELP
C_C_CHECK: *OPTIONが複数の時用
bsr SKIPSP *スペースをスキップ
tst.b (a2) *引数があるか?
beq END *
cmpi.b #'-',(a2)
beq OP_CHECK
cmpi.b #'/',(a2)
beq OP_CHECK
bra END
SKIPSP0: addq.l #01,a2
SKIPSP:
cmpi.b #SPACE,(a2)
beq SKIPSP0
cmpi.b #TAB,(a2) *SPACE&TABは飛ばす
beq SKIPSP0
rts
TOUPPER:
cmpi.b #"a",d0 *小文字なら大文字に
bcs TOUPPER0
cmpi.b #"z"+1,d0
bcc TOUPPER0
subi.b #$20,d0
TOUPPER0:
rts
**********************************************************
** Mercury-Unit Check **
**********************************************************
UNIT_CHECK:
move.w #2,-(sp) *サイズ
move.l #$00E0_0000,-(sp) *TEXT VRAM 書き込み
move.l #$00EC_C100,-(sp) *Xellent 読み込み
DOS _BUS_ERR *$fff7
lea 10(sp),sp
tst.l d0
beq NOTUNIT *Xellent030
*バスエラったらXellent無しなので以下OK
*バスエラなかったらダメ
NO_Xellent:
move.w #2,-(sp)
move.l #$00EC_C080,-(sp)
move.l #$00EC_C080,-(sp)
DOS _BUS_ERR
lea.l 10(sp),sp
tst.l d0
bne NOTUNIT *何も無し
rts
**********************************************************
** Optical in Through **
**********************************************************
OPTICAL_CHECK:
bsr UNIT_CHECK
clr.l -(sp)
DOS _SUPER * スーパーバイザモードへ
move.l d0,SSP_SAVE * ssp待避
addq.l #4,sp
moveq.l #6,d0 *6*1/60
W_V0:
btst.b #4,$E88001
beq W_V0 *帰って来ない
W_V1:
btst.b #4,$E88001
bne W_V1 *帰って来た
dbra d0,W_V0
move.l SSP_SAVE(pc),-(sp) *
DOS _SUPER * ユーザーモードへ
addq.l #4,sp *
btst.b #0,$ECC0A1
bne OPTICAL_STOP
STEREO_OPTICAL_OUT:
bsr UNIT_CHECK
moveq.l #0,d0
move.b $ECC0A1,D0
andi.b #%0100_0000,d0
or.b #%0000_1110,d0
move.b d0,$ecc091
pea.l OPTICAL_OUT_STEREO_MES(pc)
bra @F
RIGHT_OPTICAL_OUT:
bsr UNIT_CHECK
moveq.l #0,d0
move.b $ECC0A1,d0
andi.b #%0100_0000,d0
or.b #%0000_1010,d0
move.b d0,$ECC091
pea.l OPTICAL_OUT_RIGHT_MES(pc)
bra @F
LEFT_OPTICAL_OUT:
bsr UNIT_CHECK
moveq.l #0,d0
move.b $ECC0A1,d0
andi.b #%0100_0000,d0
or.b #%0000_0110,d0
move.b d0,$ECC091
pea.l OPTICAL_OUT_LEFT_MES(pc)
@@:
DOS _PRINT
addq.l #4,sp
bra C_C_CHECK
**********************************************************
** Stop Optical in Through **
**********************************************************
OPTICAL_STOP:
bsr UNIT_CHECK
moveq.l #0,d0
move.b $ECC0A1,d0
or.b #%0000_0001,d0
move.b d0,$ECC091
pea.l OPTICAL_STOP_MES(pc)
DOS _PRINT
addq.l #4,sp
bra C_C_CHECK
**********************************************************
** ADPCM Through **
**********************************************************
ADPCM_THROUGH:
move.b (a2)+,d0 *一文字取り出す
bsr TOUPPER *大文字に変換しておく
cmpi.b #"M",d0 *出力左右
beq ADPCM_MIDDLE_OUT
cmpi.b #"L",d0 *左
beq ADPCM_LEFT_OUT
cmpi.b #"R",d0 *右
beq ADPCM_RIGHT_OUT
cmpi.b #"S",d0 *停止
beq ADPCM_OUT_STOP
**********************************************************
** ADPCM出力 **
**********************************************************
ADPCM_MIDDLE_OUT:
move.w #$0403,d1
move.l #$00ff,d2
lea.l PCM_BUF(pc),a1
IOCS _ADPCMINP
pea.l ADPCM_MIDDLE_OUT_MES(pc)
bra @F
ADPCM_OUT_STOP:
moveq.l #00,d1
move.l #$00ff,d2
lea.l PCM_BUF(pc),a1
IOCS _ADPCMINP
pea.l ADPCM_OUT_STOP_MES(pc)
bra @F
ADPCM_LEFT_OUT:
move.w #$0401,d1
move.l #$00ff,d2
lea.l PCM_BUF(pc),a1
IOCS _ADPCMINP
pea.l ADPCM_LEFT_OUT_MES(pc)
bra @F
ADPCM_RIGHT_OUT:
move.w #$0402,d1
move.l #$00ff,d2
lea.l PCM_BUF(pc),a1
IOCS _ADPCMINP
pea.l ADPCM_RIGHT_OUT_MES(pc)
@@:
DOS _PRINT
addq.l #4,sp
bra C_C_CHECK
**********************************************************
** TEXT 出力 **
**********************************************************
HELP:
pea.l HELP_MES(pc)
DOS _PRINT
addq.l #4,sp
bra END
NOTUNIT:
pea.l NOTUNIT_MES(pc)
DOS _PRINT
addq.l #4,sp
END_1
tst.l d6
beq HELP
END:
DOS _EXIT
**********************************************************
** TEXT **
**********************************************************
.data
.even
MAIN_MES:
.dc.b '
Through the Optical In of Mercury-Unit ver0.40
',CR,LF
.dc.b ' Programed by ふなぽん 1 August 1997',CR,LF,LF,0
OPTICAL_OUT_STEREO_MES: .dc.b 'Optical Through [Stereo]',CR,LF,0
OPTICAL_OUT_RIGHT_MES: .dc.b 'Optical Through [Right]',CR,LF,0
OPTICAL_OUT_LEFT_MES: .dc.b 'Optical Through [Left]',CR,LF,0
OPTICAL_STOP_MES: .dc.b 'STOP Optical Through',CR,LF,0
NOTUNIT_MES: .dc.b 'Mercury-Unit is not inserted this X680x0.',CR,LF,0
ADPCM_MIDDLE_OUT_MES: .dc.b 'AUDIO IN Through [Middle]',CR,LF,0
ADPCM_RIGHT_OUT_MES: .dc.b 'AUDIO IN Through [Right]',CR,LF,0
ADPCM_LEFT_OUT_MES: .dc.b 'AUDIO IN Through [Left]',CR,LF,0
ADPCM_OUT_STOP_MES: .dc.b 'STOP AUDIO IN Through',CR,LF,0
HELP_MES
.dc.b '-M
Through
the Optical IN (
STEREO
) of Mercury-Unit',CR,LF
.dc.b '-R
Through
the Optical IN (
RIGHT
) of Mercury-Unit',CR,LF
.dc.b '-L
Through
the Optical IN (
LEFT
) of Mercury-Unit',CR,LF
.dc.b '-S
Stop
the Through of Optical IN of Mercury-Unit',CR,LF
.dc.b '-C
Check
the Through of Optical IN of Mercury-Unit',CR,LF
.dc.b CR,LF
.dc.b '-A or -AM
Through
the AUDIO IN (
MIDDLE
) of X680x0',CR,LF
.dc.b '-AR
Through
the AUDIO IN (
RIGHT
) of X680x0',CR,LF
.dc.b '-AL
Through
the AUDIO IN (
LEFT
) of X680x0',CR,LF
.dc.b '-AS
STOP
the AUDIO IN of X680x0',CR,LF,0
.bss
.even
SSP_SAVE: .ds.l 1
PCM_BUF: .ds.b 256
.stack
.even
MYSTACK:
.ds.l 256 *スタック領域
MYSP:
.end